from django.shortcuts import render
from .models import CourseInfo
from django.core.paginator import PageNotAnInteger, EmptyPage, Paginator
from operations.models import UserLove, UserCourse
from django.contrib.auth.decorators import login_required
from tools.decorators import login_decorator


# Create your views here.
def course_list(request):
    all_courses = CourseInfo.objects.all()
    recommend_courses = all_courses.order_by('-add_time')[:3]

    # 全局搜索功能过滤
    keyword = request.GET.get('keyword', '')
    if keyword:
        all_courses = all_courses.filter(name__icontains=keyword)

    sort = request.GET.get('sort', '')
    if sort:
        all_courses = all_courses.order_by('-' + sort)

    # 分页
    page_num = request.GET.get('pagenum', '')
    pa = Paginator(all_courses, 3)
    try:
        pages = pa.page(page_num)
    except PageNotAnInteger:
        pages = pa.page(1)
    except EmptyPage:
        pages = pa.page(pa.num_pages)

    return render(request, 'courses/course-list.html', {
        'all_courses': all_courses,
        'recommend_courses': recommend_courses,
        'pages': pages,
        'sort': sort,
        'keyword': keyword,
    })


def course_detail(request, course_id):
    if course_id:
        course = CourseInfo.objects.filter(id=course_id)[0]
        course.click_num += 1
        course.save()
        # 用户是否收藏标记
        love_course_flag = False
        love_org_flag = False

        if request.user.is_authenticated:
            love = UserLove.objects.filter(love_id=course_id, love_type=2, love_status=True, love_man=request.user)
            if love:
                love_course_flag = True

            love = UserLove.objects.filter(love_id=course.orgInfo.id, love_type=1, love_status=True,
                                           love_man=request.user)
            if love:
                love_org_flag = True

        relation_courses = CourseInfo.objects.filter(category=course.category).exclude(id=course_id)
        return render(request, 'courses/course-detail.html', {
            'course': course,
            'relation_courses': relation_courses,
            'love_course_flag': love_course_flag,
            'love_org_flag': love_org_flag,
        })


# @login_required(login_url='/users/user_login')
@login_decorator
def course_video(request, course_id):
    if course_id:
        course = CourseInfo.objects.filter(id=course_id)[0]

        # 当前用户点击开始学习后,代表这个用户学习了这个课程
        # 我们需要去判断用户学习课程的表当中有没有学习这门课程的记录
        # 如果没有,需要给加上这条记录,代表用户学习了这门课程
        user_course_list = UserCourse.objects.filter(study_man=request.user, study_course=course)
        if not user_course_list:
            UserCourse.objects.create(
                study_man=request.user,
                study_course=course
            )

            course.study_num += 1
            course.save()

            # 第一步: 从学习课程的表中查找当前这个人学习的所有的课程
            user_course_list = UserCourse.objects.filter(study_man=request.user)
            course_list = [user_course.study_course for user_course in user_course_list]
            # 第二部: 根据拿到的所有课程,找到每个课程的机构
            org_list = [course.orgInfo for course in course_list]

            if course.orgInfo not in org_list:
                course.orgInfo.study_num += 1
                course.orgInfo.save()

        # 学过该课的同学,还学过什么课程
        # 第一步:我们需要从中间表当中找到学过该课程的所有对象
        user_course_list = UserCourse.objects.filter(study_course=course)
        # 第二步:根据找到的用户学习课程列表,遍历拿到所有学习过这门课程的用户列表
        user_list = [user_course.study_man for user_course in user_course_list]
        # 第三步:再根据找到的用户,从中间学习课程表当中,找到所有用户学习其他课程的整个对象
        user_course_list = UserCourse.objects.filter(study_man__in=user_list).exclude(study_course=course)
        # 第四步:从获取到的用户课程列表当中,拿到我们需要的其他课程
        courses = list(set([user_course.study_course for user_course in user_course_list]))

        return render(request, 'courses/course-video.html', {
            'course': course,
            'course_list': courses,
        })


def course_comment(request, course_id):
    if course_id:
        course = CourseInfo.objects.filter(id=course_id)[0]
        all_comment = course.usercomment_set.all()[:10]

        # 学过该课的同学,还学过什么课程
        # 第一步:我们需要从中间表当中找到学过该课程的所有对象
        user_course_list = UserCourse.objects.filter(study_course=course)
        # 第二步:根据找到的用户学习课程列表,遍历拿到所有学习过这门课程的用户列表
        user_list = [user_course.study_man for user_course in user_course_list]
        # 第三步:再根据找到的用户,从中间学习课程表当中,找到所有用户学习其他课程的整个对象
        user_course_list = UserCourse.objects.filter(study_man__in=user_list).exclude(study_course=course)
        # 第四步:从获取到的用户课程列表当中,拿到我们需要的其他课程
        courses = list(set([user_course.study_course for user_course in user_course_list]))

        return render(request, 'courses/course-comment.html', {
            'course': course,
            'all_comment': all_comment,
            'course_list': courses,
        })
